package main

import "fmt"

func fn1(x int) int {
	x = 10
	return x
}

func fn2(x *int) {
	*x = 20
}

func main() {
	var a int = 5
	fn1(5)
	fmt.Println(a) //5   修改的是函数内部的值，不影响外部的a
	fn2(&a)
	fmt.Println(a) //20  通过指针修改了外部的值

	/*
		声明指针
	*/
	/* 错误写法
	   var b *int
	   *b = 100
	   fmt.Println(*b)
	*/

	//new初始化
	var c = new(int)
	fmt.Printf("c的值：%v,类型：%T,指针指向的地址数据值是：%v\n", c, c, *c)
	//c的值：0x1400009c020,类型：*int,指针指向的地址数据值是：0

	var d *int
	d = new(int)
	*d = 100
	fmt.Println(*d) //100
}
